Rate control is essential for media streaming over packet networks. The challenge in delivering bandwidth-intensive content-like multimedia over capacity-limited, shared links is to quickly respond to changes in network conditions by adjusting the bitrate and the media encoding scheme to optimize the viewing and listening experience of the user. In particular, when transferring a fixed bitrate over a connection that cannot provide the necessary throughput, several undesirable effects arise. For example, a network buffer may overflow resulting in packet loss causing garbled video or audio playback, or a media player buffer may underflow resulting in playback stall.
HTTP progressive download, or pseudo-streaming is perhaps the most widely used technique for media transport over the internet. This method consists of the HTTP download of a media file, which is played back by the Media Player as data becomes available.
Media files can be categorized in two different types: (1) streamable without index; and (2) streamable with index. Streamable without index is where provided information for playing a media frame is fully contained within the media frame in the sense that a master index of frames is not needed by the player to render, or seek to a frame, while streamable with index is where individual media frames cannot be played, or seeked without a file index. The file index is associated with a number of data frames containing content. The file index lets the media player know in what order to process each of the associated data frames. For streamable with index media files (hereinafter referred to as “indexed media files”), the media player must process the file index first so that the media player is able to correctly play the indexed media file. An example of an indexed media file is MP4 (known as “MPEG-4 Part 14”, or “ISO/IEC 14496-14:2003”). MP4 is a multimedia container file format standard specified as a part of MPEG-4.
Generating an indexed media file is usually a two-step process. In the first step, an encoder may generate data frames and record their sizes in a separate table. After all frames have been encoded, the encoder may then write the file index. In the second step, the encoder may arrange the file index and generated data frames in a correct order for streaming. One of the problems with this traditional two step MP4 encoding process is that it cannot provide a real-time transcoding, compression, optimization, or any other real-time, on-the-fly modification process.